﻿#define  _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//////2. 命名空间可以嵌套​
////namespace bit
////{
////	// 鹏哥​
////	namespace pg
////	{
////		int rand = 1;
////		int Add(int left, int right)
////		{
////			return left + right;
////		}
////	}
////	// 杭哥​
////	namespace hg
////	{
////		int rand = 2;
////		int Add(int left, int right)
////		{
////			return (left + right) * 10;
////		}
////	}
////}
//
//using namespace std;
//int main()
//{
//	/*printf("%d\n", bit::pg::rand);
//	printf("%d\n", bit::hg::rand);
//	printf("%d\n", bit::pg::Add(1, 2));
//	printf("%d\n", bit::hg::Add(1, 2));*/
//	int i ;
//	double j;
//	char c;
//	//std::cout << i << endl;
//	//输入
//	cin >> i >> j >> c;
//	//输出
//	cout << i << j << c<<endl;
//	//输出,空格隔开
//	cout << i << "  " << j <<"  " << "  " << c << endl;
//	//自动识别类型
//	cout << &i << endl;
//
//	return 0;
//}
//#include <iostream>
//using namespace std;
//// 全缺省​
//void Func1(int a = 10, int b = 20, int c = 30)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//// 半缺省​
//void Func2(int a, int b = 10, int c = 20)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//int main()
//{
//	//传给函数的参数函数会一一对应接受，这与普通函数是一样的
//	
//	// 对于全缺省来说，可以不传，也可以传一个，也可以传多个
//	Func1();
//	Func1(1);
//	Func1(1, 2);
//	Func1(1, 2, 3);
//	Func2(100);
//	Func2(100, 200);
//	Func2(100, 200, 300);
//
//	//但是对于半缺省参数来说，未缺省的参数必须传
//	//错误示范：
//	  Func2();
//	
//	//无论是全缺省还是半缺省，都不能跳跃着传参数给函数
//	// 错误示范：
//	  Func1(, 2, );
//	  Func2(, 200, );
//
//	  
//	return 0;
//}
#include<iostream>
using namespace std;
// 1、参数类型不同​
int Add(int left, int right)
{
	cout << "int Add(int left, int right)" << endl;
	return left + right;
}
double Add(double left, double right)
{
	cout << "double Add(double left, double right)" << endl;
	return left + right;
}

void f(int a, char b)
{
	cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
	cout << "f(char b, int a)" << endl;
}



namespace k
{
	void f1()
	{
		cout << "f()" << endl;
	}
}
void f1(int a = 10)
{
	cout << "f(int a)" << endl;
}
 
//两个交换函数，参数类型不一样，构成函数重载


//这里形参使用引用，形参就变成了实参的别名,也就是形参和实参都是指的一个东西
//自然形参的改变，就会同样的改变实参，因为他们是同一个“人”
void Swap(int& rx, int& ry)
{
	int tmp = rx;
	rx = ry;
	ry = tmp;
}


void Swap(int* px, int* py)
{
	int tmp =*px;
	*px = *py;
	*py = tmp;
}
//#if 0
//int main()
//{
//	int a = 0;
//	// 引用：b和c是a的别名​
//	int& b = a;
//	int& c = a;
//	// 也可以给别名b取别名，d相当于还是a的别名​
//	int& d = b;
//	++d;
//	// 这里取地址我们看到是一样的​
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c << endl;
//	cout << &d << endl;
//	return 0;
//}
//#endif


#if 0
int main()
{
	int x = 0, y = 1;
	cout << "传地址的函数调用" << endl;
	cout << x << " " << y << endl;
	Swap(&x, &y);
	cout << x << " " << y << endl;


	x = 0, y = 1;
	cout << "别名交换" << endl;
	cout << x << " " << y << endl;
	Swap(x, y);
	cout << x << " " << y << endl;
	return 0;
}
#endif

#if 0
int main()
{
	int a = 10;
	int& b = a;
	int& c = b;


	int d = 20;
	//这里是把d的值赋值给b，还是让b引用，变成d的别名？
	//答案是赋值，因为这里不能改变引用的指向
	b = d;

	//我们来打印他们的地址就可以看到是赋值还是变成别名了
	cout << &a << endl;
	cout << &b << endl;
	cout << &c << endl;
	cout << &d << endl;

	return 0;

}
#endif

int main()
{
	
	const int& b = 3;
	return 0;
}



